ãã«ãæéã®æé©åãšã©ã³ã¿ã€ã ãšã©ãŒã®é²æ¢ã®ããã«ãTypeScriptã®`import type`æ§æãæ¢æ±ããŸããåéå®ã€ã³ããŒããšãã®å©ç¹ã«ã€ããŠåŠã³ãŸãããã
TypeScript Import Type: Type-Only Import宣èšã®æ·±æã
TypeScriptã¯JavaScriptã®ã¹ãŒããŒã»ããã§ãããWebéçºã®ãã€ãããã¯ãªäžçã«éçåä»ãããããããŸãããã®éèŠãªæ©èœã®1ã€ã¯ãä»ã®ã¢ãžã¥ãŒã«ããåãã€ã³ããŒãããèœåã§ããããããåãã§ãã¯ã«ã®ã¿äœ¿çšãããåãã€ã³ããŒããããšãæçµçãªJavaScriptãã³ãã«ã«äžèŠãªã³ãŒããå«ãŸããå¯èœæ§ããããŸããããã«å¯ŸåŠããããã«ãTypeScriptã¯import type
æ§æãå°å
¥ããŸããããã®ããã°èšäºã§ã¯ãimport type
ã«ã€ããŠè©³ããæãäžãããã®ç®çãäœ¿çšæ³ãå©ç¹ãããã³æœåšçãªæ³šæç¹ã«ã€ããŠèª¬æããŸãã
import type
ãšã¯äœã§ããïŒ
import type
ã¯ãã¢ãžã¥ãŒã«ã®åå®çŸ©ã®ã¿ãã€ã³ããŒãããã¢ãžã¥ãŒã«ã®ã©ã³ã¿ã€ã å€ãã€ã³ããŒãããªãTypeScriptåºæã®æ§æã§ããããã¯ãåæ³šéãåãã§ãã¯ã®ããã«å¥ã®ã¢ãžã¥ãŒã«ããåã䜿çšããå¿
èŠãããããã©ã³ã¿ã€ã æã«ãã®å€ã«ã¢ã¯ã»ã¹ããå¿
èŠããªãå Žåã«ç¹ã«åœ¹ç«ã¡ãŸããããã«ãããJavaScriptã³ã³ãã€ã©ãŒã¯ãåæ
å ±ã«ã®ã¿äœ¿çšãããŠããå Žåãã³ã³ãã€ã«äžã«ã€ã³ããŒããããã¢ãžã¥ãŒã«ãçç¥ããããããã³ãã«ãµã€ãºãå°ãããªããŸãã
ãªãimport type
ã䜿çšããã®ã§ããïŒ
import type
ã䜿çšããçç±ã¯ããã€ããããŸãã
- ãã³ãã«ãµã€ãºã®æ¹åïŒæšæºã®
import
ã¹ããŒãã¡ã³ãã䜿çšããŠã¢ãžã¥ãŒã«ãã€ã³ããŒããããšãåã®ã¿ã䜿çšããå Žåã§ããã¢ãžã¥ãŒã«å šäœãçæãããJavaScriptã«å«ãŸããŸããimport type
ã¯ãã³ã³ãã€ã«äžã«åæ å ±ã®ã¿ã䜿çšãããæçµçãªãã³ãã«ã«ã¯ã¢ãžã¥ãŒã«ãå«ãŸããªãããã«ããããããã³ãã«ãå°ãããããå¹ççã«ãªããŸãã - 埪ç°äŸåé¢ä¿ã®é²æ¢ïŒåŸªç°äŸåé¢ä¿ã¯ãå€§èŠæš¡ãªãããžã§ã¯ãã§å€§ããªåé¡ã«ãªãå¯èœæ§ããããã©ã³ã¿ã€ã ãšã©ãŒãäºæããªãåäœã«ã€ãªããå¯èœæ§ããããŸãã
import type
ã䜿çšãããšãã¢ãžã¥ãŒã«ã®ã©ã³ã¿ã€ã å€ãã€ã³ããŒãããã«ãã¢ãžã¥ãŒã«ããåå®çŸ©ã®ã¿ãã€ã³ããŒãã§ããããã埪ç°äŸåé¢ä¿ãè§£æ¶ããã€ã³ããŒãåŠçäžã«ã¢ãžã¥ãŒã«ã®ã³ãŒããå®è¡ãããªãããã«ããããšãã§ããŸãã - ããã©ãŒãã³ã¹ã®åäžïŒãã³ãã«ãµã€ãºãå°ãããªããšãç¹ã«Webã¢ããªã±ãŒã·ã§ã³ã®å ŽåãããŒãæéãççž®ãããŸããäžèŠãªã³ãŒãããã³ãã«ããåé€ããããšã«ããã
import type
ã¯ã¢ããªã±ãŒã·ã§ã³å šäœã®ããã©ãŒãã³ã¹ãåäžãããã®ã«åœ¹ç«ã¡ãŸãã - ã³ãŒãã®æç¢ºãã®åäžïŒ
import type
ã䜿çšãããšãåæ å ±ã®ã¿ãã€ã³ããŒãããŠããããšãæç¢ºã«ãªããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžããŸããããã¯ãã€ã³ããŒããããã¢ãžã¥ãŒã«ãåãã§ãã¯ã«ã®ã¿äœ¿çšãããŠããããšãä»ã®éçºè ã«ç€ºããŸãã
import type
ã®äœ¿ç𿹿³
import type
ã®æ§æã¯ç°¡åã§ããæšæºã®import
ã¹ããŒãã¡ã³ãã䜿çšãã代ããã«ãã€ã³ããŒãããåã®åã«import type
ã䜿çšããŸããåºæ¬çãªäŸã次ã«ç€ºããŸãã
import type { User } from './user';
function greetUser(user: User): string {
return `Hello, ${user.name}!`;
}
ãã®äŸã§ã¯ã./user
ã¢ãžã¥ãŒã«ããUser
åãã€ã³ããŒãããŠããŸããgreetUser
颿°ã§å泚éã«ã®ã¿User
åã䜿çšããŠããŸããUser
ã¢ãžã¥ãŒã«ã®å€ã¯ãã©ã³ã¿ã€ã æã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã
éåžžã®ã€ã³ããŒããšã®import type
ã®çµã¿åãã
type
ããŒã¯ãŒãã䜿çšããŠãåãã¹ããŒãã¡ã³ãã§éåžžã®ã€ã³ããŒããšimport type
ãçµã¿åãããããšãã§ããŸãã
import { someValue, type User, type Product } from './module';
function processUser(user: User): void {
// ...
}
console.log(someValue);
ãã®å ŽåãsomeValue
ã¯éåžžã®å€ãšããŠã€ã³ããŒããããUser
ãšProduct
ã¯åãšããŠã®ã¿ã€ã³ããŒããããŸããããã«ãããåãã¢ãžã¥ãŒã«ããå€ãšåã®äž¡æ¹ãåäžã®ã¹ããŒãã¡ã³ãã§ã€ã³ããŒãã§ããŸãã
ãã¹ãŠãåãšããŠã€ã³ããŒããã
ã¢ãžã¥ãŒã«ããå€ãã€ã³ããŒãããã«ããã¹ãŠã®åãã€ã³ããŒãããå¿
èŠãããå Žåã¯ãimport type
ã䜿çšããŠåå空éã€ã³ããŒãæ§æã䜿çšã§ããŸãã
import type * as Types from './types';
function processData(data: Types.Data): void {
// ...
}
ããã§ã¯ã./types
ã¢ãžã¥ãŒã«ãããã¹ãŠã®åãTypes
åå空éã«ã€ã³ããŒãããŸããæ¬¡ã«ãTypes.
ãã¬ãã£ãã¯ã¹ã䜿çšããŠåã«ã¢ã¯ã»ã¹ã§ããŸãã
ããŸããŸãªãããžã§ã¯ãã¿ã€ãã§ã®äŸ
import type
ã®å©ç¹ã¯ãããŸããŸãªãããžã§ã¯ãã¿ã€ãã«é©çšãããŸãã以äžã«ããã€ãã®äŸã瀺ããŸãã
äŸ1ïŒReactã³ã³ããŒãã³ã
ç¹å®ã®åãæã€propsãåãåãReactã³ã³ããŒãã³ããèããŠã¿ãŸãããã
import React from 'react';
import type { User } from './user';
interface Props {
user: User;
}
const UserProfile: React.FC<Props> = ({ user }) => {
return (
<div>
<h2>User Profile</h2>
<p>Name: {user.name}</p>
<p>Email: {user.email}</p>
</div>
);
};
export default UserProfile;
ãã®Reactã®äŸã§ã¯ãimport type { User } from './user';
ã«ãããUser
ã®åå®çŸ©ã®ã¿ãã€ã³ããŒãããããã³ãã«ãµã€ãºãæé©åãããŸãã'user'ã¢ãžã¥ãŒã«ã®å€ãçŽæ¥äœ¿çšããŠããŸããããã®ã¢ãžã¥ãŒã«ã§å®çŸ©ãããŠãã'User' *type*ã䜿çšããŠããã ãã§ãã
äŸ2ïŒNode.jsããã¯ãšã³ã
Node.jsããã¯ãšã³ãã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ããŒã¹ã¢ãã«ãåãšããŠå®çŸ©ã§ããŸãã
import type { User } from './models';
import { createUser } from './db';
async function registerUser(userData: User): Promise<void> {
await createUser(userData);
}
ããã§ãimport type { User } from './models';
ã¯ãåãã§ãã¯ã«User
åã®ã¿ãå¿
èŠãªå Žåãmodels
ã¢ãžã¥ãŒã«å
šäœããã³ãã«ã«å«ããããšãåé¿ããŸããcreateUser
颿°ã¯ã*ã©ã³ã¿ã€ã *ã§äœ¿çšããããã«ã€ã³ããŒããããŸãã
äŸ3ïŒAngularãµãŒãã¹
AngularãµãŒãã¹ã§ã¯ãåã䜿çšãããµãŒãã¹ãæ³šå ¥ã§ããŸãã
import { Injectable } from '@angular/core';
import type { Product } from './product.model';
import { ProductService } from './product.service';
@Injectable({
providedIn: 'root',
})
export class OrderService {
constructor(private productService: ProductService) {}
getFeaturedProducts(): Product[] {
return this.productService.getProducts().filter(p => p.isFeatured);
}
}
Product
åã¯ãproductService.getProducts()
ã¡ãœããã«ãã£ãŠè¿ãããããŒã¿ã®æ§é ãå®çŸ©ããããã«äœ¿çšãããŸããimport type { Product } from './product.model';
ã䜿çšãããšãåæ
å ±ã®ã¿ãã€ã³ããŒããããAngularã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ãåäžããŸããProductService
ã¯ã*ã©ã³ã¿ã€ã *äŸåé¢ä¿ã§ãã
ããŸããŸãªéçºç°å¢ã§ã®import type
ã®äœ¿çšã®å©ç¹
import type
ãæ¡çšããããšã®å©ç¹ã¯ãããŸããŸãªéçºèšå®ã«åã³ãŸãã
- MonoreposïŒMonorepoæ§é å
ã§ã¯ã
import type
ã¯åã ã®ããã±ãŒãžãã³ãã«ã®ãµã€ãºãåæžãããã«ãæéãççž®ãããªãœãŒã¹å©çšãããå¹ççã«ããŸãã - ãã€ã¯ããµãŒãã¹ïŒãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã§ã¯ã
import type
ã¯äŸåé¢ä¿ç®¡çãç°¡çŽ åããå¿ èŠãªåæ å ±ã®ã¿ãã€ã³ããŒããããããšã確èªããããšã«ããããµãŒãã¹ã®ã¢ãžã¥ãŒã«æ§ãåäžãããŸãã - ãµãŒããŒã¬ã¹é¢æ°ïŒãµãŒããŒã¬ã¹é¢æ°ç°å¢ã§ã¯ã
import type
ã¯é¢æ°ã®ãããã€ããã±ãŒãžãµã€ãºãæžãããã³ãŒã«ãã¹ã¿ãŒããé«éåãããªãœãŒã¹æ¶è²»ãæé©åããŸãã - ã¯ãã¹ãã©ãããã©ãŒã éçºïŒWebãã¢ãã€ã«ããã¹ã¯ããããã©ãããã©ãŒã ã®ããããéçºããŠããå Žåã§ãã
import type
ã¯ããŸããŸãªç°å¢ã§äžè²«ããåãã§ãã¯ãä¿èšŒããã©ã³ã¿ã€ã ãšã©ãŒã®å¯èœæ§ãæžãããŸãã
æœåšçãªæ³šæç¹
import type
ã¯äžè¬çã«æçã§ãããæ³šæãã¹ãç¹ãããã€ããããŸãã
- TypeScriptããŒãžã§ã³èŠä»¶ïŒ
import type
ã¯TypeScript 3.8ã§å°å ¥ãããŸããããã®æ§æã䜿çšããã«ã¯ãå°ãªããšããã®ããŒãžã§ã³ã®TypeScriptã䜿çšããŠããå¿ èŠããããŸãã - ã©ã³ã¿ã€ã ã®äœ¿çšæ³ïŒã©ã³ã¿ã€ã æã«
import type
ã®å€ãåç §ããããšã¯ã§ããŸãããã©ã³ã¿ã€ã æã«ã¢ãžã¥ãŒã«ããå€ã«ã¢ã¯ã»ã¹ããå¿ èŠãããå Žåã¯ãéåžžã®import
ã¹ããŒãã¡ã³ãã䜿çšããå¿ èŠããããŸããã©ã³ã¿ã€ã æã«import type
ã®å€ãåç §ããããšãããšãã³ã³ãã€ã«æãšã©ãŒãçºçããŸãã - Transpilersããã³BundlersïŒãã©ã³ãã€ã©ãŒïŒäŸïŒBabelïŒããã³ãã³ãã©ãŒïŒäŸïŒWebpackãRollupãParcelïŒã
import type
ã¹ããŒãã¡ã³ããæ£ããåŠçããããã«æ§æãããŠããããšã確èªããŠãã ãããã»ãšãã©ã®ææ°ã®ããŒã«ã¯import type
ãããã«ãµããŒãããŠããŸãããåžžã«æ§æãå確èªããããšããå§ãããŸããäžéšã®å€ãããŒã«ã§ã¯ããããã®ã€ã³ããŒããæ£ããåé€ããããã«ãç¹å®ã®ãã©ã°ã€ã³ãŸãã¯æ§æãå¿ èŠã«ãªãå ŽåããããŸãã
import type
ã䜿çšããããã®ãã¹ããã©ã¯ãã£ã¹
import type
ã广çã«äœ¿çšããã«ã¯ã次ã®ãã¹ããã©ã¯ãã£ã¹ãæ€èšããŠãã ããã
- å¯èœãªéã
import type
ã䜿çšããïŒã¢ãžã¥ãŒã«ãåå®çŸ©ã«ã®ã¿äœ¿çšããŠããå Žåã¯ãåžžã«import type
ã䜿çšããŸããããã«ããããã³ãã«ãµã€ãºãåæžããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã - éåžžã®ã€ã³ããŒããš
import type
ãçµã¿åãããïŒåãã¢ãžã¥ãŒã«ããå€ãšåã®äž¡æ¹ãã€ã³ããŒãããå Žåã¯ãã³ãŒããç°¡æœã§èªã¿ãããããããã«ãçµã¿åãããæ§æã䜿çšããŸãã - åå®çŸ©ãåé¢ããïŒåå®çŸ©ãå¥ã®ãã¡ã€ã«ãŸãã¯ã¢ãžã¥ãŒã«ã«ä¿æããããšãæ€èšããŠãã ãããããã«ããã
import type
ã䜿çšããŠå¿ èŠãªåã®ã¿ãç°¡åã«èå¥ããŠã€ã³ããŒãã§ããŸãã - ã€ã³ããŒãã宿çã«ç¢ºèªããïŒãããžã§ã¯ãã倧ãããªãã«ã€ããŠãã€ã³ããŒãã宿çã«ç¢ºèªããŠãäžèŠãªã¢ãžã¥ãŒã«ãŸãã¯å€ãã€ã³ããŒãããŠããªãããšã確èªããŠãã ããããã®ããã»ã¹ãèªååããããã«ãé©åãªã«ãŒã«ãæã€ESLintãªã©ã®ããŒã«ã䜿çšããŸãã
- äœ¿çšæ³ãææžåããïŒç¹å®ã®ã±ãŒã¹ã§
import type
ã䜿çšããŠããçç±ã説æããããã«ãã³ãŒãã«ã³ã¡ã³ãã远å ããŸããããã«ãããä»ã®éçºè ãæå³ãçè§£ããã³ãŒããããç°¡åã«ä¿å®ã§ããããã«ãªããŸãã
åœéåïŒi18nïŒãšããŒã«ã©ã€ãºïŒl10nïŒã®èæ ®äºé
åœéåïŒi18nïŒãšããŒã«ã©ã€ãºïŒl10nïŒãå¿
èŠãšãããããžã§ã¯ãã«åãçµãå Žåãimport type
ãã³ãŒãã«ã©ã®ããã«åœ±é¿ããããæ€èšããããšãäžå¯æ¬ ã§ããå¿ã«çããŠããã¹ãç¹ãããã€ããããŸãã
- 翻蚳ãããæååã®åå®çŸ©ïŒç¿»èš³ãããæååã衚ãããã«åå®çŸ©ã䜿çšããŠããå Žåã¯ã
import type
ã䜿çšããŠãå®éã®ç¿»èš³ãã¡ã€ã«ããã³ãã«ã«å«ããããšãªãããããã®åãã€ã³ããŒãã§ããŸããããã«ããããã³ãã«ã®ãµã€ãºãæžãããããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸããç¹ã«ã翻蚳ã倿°ããå Žåã«åœ¹ç«ã¡ãŸãã - ãã±ãŒã«åºæã®åïŒããŸããŸãªãã±ãŒã«ã«å¯ŸããŠç°ãªãåå®çŸ©ãæã€å ŽåããããŸãã
import type
ã䜿çšãããšãä»ã®ãã±ãŒã«ã®åå®çŸ©ãå«ããããšãªããã¿ãŒã²ãããšããŠããç¹å®ã®ãã±ãŒã«ã®åå®çŸ©ãéžæçã«ã€ã³ããŒãã§ããŸãã - ãã±ãŒã«ããŒã¿ã®åçã€ã³ããŒãïŒå Žåã«ãã£ãŠã¯ãã©ã³ã¿ã€ã æã«ãã±ãŒã«åºæã®ããŒã¿ãåçã«èªã¿èŸŒãå¿
èŠãããå ŽåããããŸãããã®ãããªã·ããªãªã§ã¯ãããŒã¿ã«éåžžã®
import
ã¹ããŒãã¡ã³ãã䜿çšããé¢é£ããåå®çŸ©ã«import type
ã䜿çšã§ããŸãã
ããŸããŸãªåœã§ã®äŸ
import type
ãããŸããŸãªåœã§ããŸããŸãªã·ããªãªã§äœ¿çšã§ããæ¹æ³ã瀺ãäŸã次ã«ç€ºããŸãã
- Eã³ããŒã¹ãã©ãããã©ãŒã ïŒã°ããŒãã«ïŒïŒäžçäžã§è£œåã販売ããEã³ããŒã¹ãã©ãããã©ãŒã ã¯ã`import type`ã䜿çšããŠè£œååãå®çŸ©ããŸããããã«ããããã³ãã«ãµã€ãºãåæžããªãããããŸããŸãªå°åã§è£œåããŒã¿åã®äžè²«æ§ã確ä¿ãããŸããäŸïŒ
import type { Product } from './product.types'; function displayProductDetails(product: Product) { // ... }
- ãã«ã¹ã±ã¢ã¢ããªïŒãã€ãïŒïŒãã€ãã®ãã«ã¹ã±ã¢ã¢ããªã±ãŒã·ã§ã³ã¯ã`import type`ã䜿çšããŠæ£è
ããŒã¿åãå®çŸ©ããŸããããã«ããããã³ãã«ã«äžèŠãªã³ãŒããå«ããããšãæå°éã«æããããšã§ãçŸå°ã®ããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒäŸïŒGDPRïŒãžã®æºæ ãä¿èšŒãããŸãã
import type { Patient } from './patient.types'; function anonymizePatientData(patient: Patient) { // ... }
- æè²ãã©ãããã©ãŒã ïŒæ¥æ¬ïŒïŒæ¥æ¬ã®æè²ãã©ãããã©ãŒã ã¯ã`import type`ã䜿çšããŠã³ãŒã¹ææåãå®çŸ©ããŸããããã¯ãç¹ã«å€§éã®ã³ã³ãã³ããæ±ãå Žåã«ããã©ãããã©ãŒã ã®ããã©ãŒãã³ã¹ãæé©åããã®ã«åœ¹ç«ã¡ãŸãã
import type { CourseMaterial } from './course.types'; function renderCourseMaterial(material: CourseMaterial) { // ... }
- éèãµãŒãã¹ã¢ããªïŒãã©ãžã«ïŒïŒãã©ãžã«ã®éèãµãŒãã¹ã¢ããªã±ãŒã·ã§ã³ã¯ã`import type`ã䜿çšããŠååŒåãå®çŸ©ããŸããããã«ãããããŒã¿ã®æŽåæ§ã確ä¿ããããã³ãã«ãµã€ãºãæå°éã«æããããã¢ããªã±ãŒã·ã§ã³ã®å¹çãšä¿¡é Œæ§ãåäžããŸãã
import type { Transaction } from './transaction.types'; function processTransaction(transaction: Transaction) { // ... }
çµè«
import type
ã¯ãã¢ãžã¥ãŒã«ããã©ã³ã¿ã€ã å€ãã€ã³ããŒãããã«ãåå®çŸ©ã®ã¿ãã€ã³ããŒãããããšã«ãããã³ãŒããæé©åã§ããTypeScriptã®åŒ·åãªæ©èœã§ããããã«ããããã³ãã«ãµã€ãºã®æ¹åã埪ç°äŸåé¢ä¿ã®åæžãããã©ãŒãã³ã¹ã®åäžãããã³ã³ãŒãã®æç¢ºãã®åäžãããããããŸãããã®ããã°èšäºã§æŠèª¬ãããŠãããã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãimport type
ã广çã«äœ¿çšããŠãããå¹ççã§ä¿å®æ§ã®é«ãTypeScriptã³ãŒããèšè¿°ã§ããŸããTypeScriptãé²åãç¶ããã«ã€ããŠãimport type
ã®ãããªæ©èœãç©æ¥µçã«æ¡çšããããšããã¹ã±ãŒã©ãã«ã§ããã©ãŒãã³ã¹ã®é«ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ãã